構想: 監査ログの保管先をRDBからファイルやS3へ変更する
しかしレコードの変更の度にauditsテーブルへの書き込みが走る為、DBマイグレーションを行なった際に書き込みのロックが発生して、アプリケーションの動作に影響が出るといったインシデントが発生してしまいました。今回はこの恒久対応としてDBへの書き込みを廃止してS3に監査ログを保管できるように変更を加えていきます。 食べチョクでは監査ログを記録するためにAuditedを利用していました。AuditedはActiveRecordのコールバックを利用してモデルの変更を手軽にRDBに記録してくれる大変便利なGemです。しかしRDBに記録するためテーブルサイズが肥大化しパフォーマンスに影響を与える場合があるというデメリットもあります。食べチョクでは注文数の増加に伴ってこの問題に直面しました。これを解決するにあたり以下のようなアプローチが思いつきます。 1. 監査ログを定期的に消す
2. 監査ログを記録するDBを分ける
3. 監査ログをRDBとは別のストレージに記録する 1では過去分のデータが必要になった際に困りますし、2では延命措置にしかなりません。ということで今回は3を採用しました。